<!--
 * @Author: YSM
 * @Description: 
 * @Date: 2023-08-09 10:45:43
 * @LastEditTime: 2023-08-10 09:40:51
 * @FilePath: \my_web_knowledge\my_vue3_demo\src\views\breathingLight\BreathingLight.vue
-->
<template>
  <div class="breathing-light">
    <!-- 呼吸灯 -->
    <!-- 创建一个大小为40x40像素的正方形容器，并在容器内部呈现一个圆形元素。
    当呼吸灯亮起时，圆形元素的背景颜色会从半透明渐变为不透明，然后再回到半透明。
    这个过程将持续一段时间（3000毫秒），然后重复执行 -->
    <div :class="{ 'light-on': isOn }"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOn: false,
      intervalId: null,
      duration: 10000, // 呼吸周期（毫秒）
      step: 0.1, // 每次变化的步长
    };
  },
  created() {
    this.startBreathing();
  },
  beforeDestroy() {
    clearInterval(this.intervalId);
  },
  methods: {
    startBreathing() {
      this.intervalId = setInterval(() => {
        this.isOn = !this.isOn;
      }, this.duration * this.step);
    },
  },
};
</script>

<style scoped>
.breathing-light {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  position: relative;
}

.light-on {
  background-color: #ff9800;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  opacity: 1;
  transition: opacity 0.5s ease-in-out;
}

.light-on::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background-color: #ff9800;
  opacity: 0.5;
  animation: pulsate 2s infinite;
}

@keyframes pulsate {
  0% {
    opacity: 0.5;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0.5;
  }
}
</style>
